この章では、エラーおよび警告の取得方法について説明した後、すべてのエラーおよび警告をエラー番号順にリストします。
次の例に示すとおり、JDBCでは、ネイティブ・エラー・コードおよびメッセージを取得できます。
try {
private static void printSQLExceptions(SQLException e)
{
while (e != null) {
System.out.println("SQLState: " +
e.getSQLState());
System.out.println("Message : " +
e.getMessage());
System.out.println("Vendor : " +
e.getErrorCode());
e = e.getNextException();
System.out.println("");
}
e.printStackTrace();
}
. . .
try {
// JDBC method calls here
}
catch (SQLException ex) {
ex.printSQLExceptions();
}
. . .
}
次の例に示すとおり、ODBCでは、ネイティブ・エラー・コードおよびメッセージは、SQLError関数を使用して取得できます。
#define MSG_LNG 512 SQLCHAR szSqlState[MSG_LNG]; /* SQL state string */ SQLINTEGER pfNativeError; /* Native error code */ SQLCHAR szErrorMsg[MSG_LNG]; /* Error msg text buffer pointer */ SQLSMALLINT pcbErrorMsg; /* Error msg text Available bytes */ SQLRETURN ret = SQL_SUCCESS;
while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) {
ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError,
szErrorMsg, MSG_LNG, &pcbErrorMsg);
switch (ret) {
case SQL_SUCCESS:
fprintf(stderr, "*** %s\n*** ODBC Err = %s, "
"TimesTen Err = %ld\n",
szErrorMsg, szSqlState, pfNativeError);
break;
case SQL_SUCCESS_WITH_INFO:
fprintf(stderr, "*** Call to SQLError failed with return "
"code of SQL_SUCCESS_WITH_INFO.\n "
"*** Need to increase size of "
"message buffer.\n");
break;
case SQL_INVALID_HANDLE:
fprintf(stderr, "*** Call to SQLError failed with "
"return code of SQL_INVALID_HANDLE.\n");
break;
case SQL_ERROR:
fprintf(stderr, "*** Call to SQLError failed with "
"return code of SQL_ERROR.\n");
break;
case SQL_NO_DATA_FOUND:
break;
}
}
1回のODBC操作またはJDBC操作で、複数のエラーを生成できます。これらのエラーは、ODBC関数SQLErrorまたはJDBCメソッドSQLExceptionを複数回コールすることによって取得できます。